package com.gxa.jjty.phy.controller;

import com.gxa.jjty.core.common.ExceptionCode;
import com.gxa.jjty.core.common.JsonResult;
import com.gxa.jjty.core.exception.BusinessException;
import com.gxa.jjty.core.util.OSSUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.xml.bind.SchemaOutputResolver;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.UUID;

/**
 * @author JJuventus
 * @date 2021/10/21 16:12
 */
@RestController
@Api(tags = "图片上传接口")
public class UploadController {

    /**
     * 上传图片的上限
     */
    public static final int IMG_SIZE = 3;

//    @PostMapping("/upload")
//    public Map upload(@RequestParam("file") MultipartFile multipartFile) throws IOException {
//        //QQ截图20200724153059.png
//        String originalFilename = multipartFile.getOriginalFilename();
//        System.out.println("originalFilename:"+originalFilename);
//        // 从原始文件名中获取后缀,作为新添加的文件的文件名后缀(匹配)
//        String subfix = originalFilename.substring(originalFilename.indexOf(".")+1);
//        System.out.println("subfix:"+subfix);
//        //使用UUID作为文件名,保证服务器中存放的文件名唯一
//
//        String targetFile = UUID.randomUUID().toString().replace("-","")+"."+subfix;
//        System.out.println("targetFile:"+targetFile);
//
//        //把文件直接上传大服务器的指定位置（用绝对路径）
//        // /usr/images/uploadImg
//        // d:/images/uploadImg
//
//        // 通过request获取当前程序的根路径"/"
////        String path = request.getServletContext().getRealPath("/");
//        String fileName = "d:/images/uploadImg/"+targetFile;
//        System.out.println("fileName:"+fileName);
//
//        // 构建文件对象
//        File uploadFile = new File(fileName);
//        //核心操作(含有异常操作, 利用异常设定状态码(和前端约定)
//        // 此处应当和ExceptionController结合, 当try执行成功则设定状态码0
//        // 出现异常则设定其他
//        // 再将异常信息结合BusinessException抛出, 交给ExceptionController处理
//        try {
//            multipartFile.transferTo(uploadFile);
//        } catch (IOException e) {
//            //e.printStackTrace();
//            throw e;
//        }
//
//        JsonResult jsonResult = new JsonResult();
//
//        // 返回状态:0 表示上传成功
//        jsonResult.setCode("0");
//        // 返回服务器保存后的文件名
//        jsonResult.put("fileName",targetFile);
//        return jsonResult.getDataMap();
//
//    }
//
//    @PostMapping("/uploadOss")
//    public Map uploadOss(@RequestParam("file") MultipartFile multipartFile) throws Exception {
//        //QQ截图20200724153059.png
//        String originalFilename = multipartFile.getOriginalFilename();
//        //System.out.println("originalFilename:"+originalFilename);
//        //从原始文件名中获取后缀,作为新添加的文件的文件名后缀(匹配)
//        String subfix = originalFilename.substring(originalFilename.indexOf(".")+1);
//        //System.out.println("subfix:"+subfix);
//        //使用UUID作为文件名,保证服务器中存放的文件名唯一
//
//        String targetFile = UUID.randomUUID().toString().replace("-","")+"."+subfix;
//        //System.out.println("targetFile:"+targetFile);
//
//        //把文件直接上传大服务器的指定位置（用绝对路径）
//        // /usr/images/uploadImg
//        // d:/images/uploadImg
//
//        // 通过request获取当前程序的根路径"/"
//        //String path = request.getServletContext().getRealPath("/");
//        String fileName = "images/uploadImg/"+targetFile;
//        //System.out.println("fileName:"+fileName);
//
//        // 构建文件对象
//        File uploadFile = new File(fileName);
//        //核心操作(含有异常操作, 利用异常设定状态码(和前端约定)
//        //调用OSSUtil的upload
//        OSSUtil.upload(fileName,multipartFile.getInputStream());
//
//        JsonResult jsonResult = new JsonResult();
//        // 返回状态:0 表示上传成功
//        jsonResult.setCode("0");
//        // 返回服务器保存后的文件名
//        jsonResult.put("fileName","/ossImg/"+fileName);
//        return jsonResult.getDataMap();
//
//    }

    @PostMapping("/uploadOss")
    @ApiOperation("上传图片到阿里云oss接口")
    @ApiImplicitParam(name = "file",value = "图片文件",paramType = "query")
    public Map uploadOss(@RequestParam("file") MultipartFile[] multipartFiles) throws Exception {

        JsonResult jsonResult = new JsonResult();
        List<String> names = null;

        if (multipartFiles.length > IMG_SIZE){
            jsonResult.setCode("0");
            jsonResult.setMsg("最多上传"+IMG_SIZE+"张图片!");
        }else if (multipartFiles.length > 0) {
            names = new ArrayList<>();
            for (MultipartFile multipartFile : multipartFiles) {


                System.out.println("图片大小(单位byte): "+multipartFile.getSize());
                if(multipartFile.isEmpty()){
                    jsonResult.setCode("0");
                    jsonResult.setMsg("未上传图片");
//                    throw new BusinessException(ExceptionCode.WRONG_IMG_SIZE);
                }else if (multipartFile.getSize() > 1024 * 1024) {
                    jsonResult.setCode("0");
                    jsonResult.setMsg("文件大小不能超过1M");
                }else {
                    //上传到阿里云OSS
                    String filename = multipartFile.getOriginalFilename();
                    // 获取后缀
                    String ext = filename.substring(filename.indexOf(".") + 1);
                    // 填写文件名。文件名包含路径，不包含Bucket名称
                    String fileName = UUID.randomUUID().toString().replaceAll("-", "");
                    String objectName = "images/evaluateImg/" + "评价" + fileName + "." + ext;

//            objectName: 要传到阿里云oss的带路径的完整文件名
//           通过 multipartFile获取前端传递的流
                    OSSUtil.upload(objectName, multipartFile.getInputStream());

                    names.add("http://bucket-xubo.oss-cn-chengdu.aliyuncs.com/" + objectName);
                    jsonResult.setCode("1");
                }
            }
            jsonResult.setData(names);
        }

        //给前端反馈
        return jsonResult.getDataMap();
    }

}
